#pragma once
#include "ImportExport.hpp"

namespace he
{
	class TerrainTile;

	//! Wall of the building.
	class Wall : boost::noncopyable
	{
		//! Enums
	public:
		//! Opening type.
		enum Opening
		{
			O_NONE = 0,
			O_DOOR = 1,
			O_WINDOW = 2,
		};
		//! Wall orientation.
		enum OrientationDirection
		{
			OD_NS = 1,
			OD_WE = 2,
			OD_SE = 3,
			OD_NE = 4,
			OD_WN = 5,
			OD_SW = 6,
			OD_SN = 7,
			OD_EW = 8,
			OD_ES = 9,
			OD_EN = 10,
			OD_NW = 11,
			OD_WS = 12
		};

		// Attributes
	private:
		//! Opening type.
		Opening const m_Opening;
		//! Wall orientation.
		OrientationDirection const m_Orientation;
		//! Material variant.
		std::uint_least8_t const m_Variant;

		// Operations
	public:
		//! Get orientation.
		HE_ENGINE_API OrientationDirection orientation() const;
		//! Get variant.
		std::uint_least8_t variant() const;

		// Construction/Destruction
	public:
		HE_ENGINE_API Wall(Opening Opening_, OrientationDirection Orientation, std::uint_least8_t const Variant);
	};
} /*he*/
